package com.aliwo.basic;

import java.math.BigInteger;

/**
 * java 基础 try catch finally 执行顺序.
 * 执行流程 在执行 try catch中的return之前一定会执行fianlly中的代码，如果finally中有return语句，就会执行finally中的return，
 * 所以finally中的return语句一定会被执行。
 * finally执行前的代码里面包含return，则会先确定return值，然后再执行finally 最后执行return。
 * @author Xu Yayuan
 * @date 2022/3/26
 */
public class DemoTryCatch {
    public static void main(String[] args) {
        test01();
        System.out.println(test02()); //4
    }

    public static void test01() {

        StringBuffer a = new StringBuffer("A");
        StringBuffer b = new StringBuffer("B");
        opera(a,b);
        System.out.println(a +"," +b);
//        int i = 1;
//        try {
////            System.out.println(i / 0);
////            i = 2;
//            return i;
//        } catch (ArithmeticException e) {
//            i = 3;
//            // 确定了返回值是3，再执行finally 虽然finally里面i=4，但是前面已经确定了i=3 所以返回3
//            return i;
//        } finally {
//            i = 4;
//        }
////        return i;
//        return sum.toString();
    }

    private static void opera(StringBuffer a, StringBuffer b) {
        a.append(b);
        b=a;
    }

    public static int test02() {
        int i = 1;
        try {
            System.out.println(i / 0);
            i = 2;
        } catch (ArithmeticException e) {
            i = 3;
            return i;
        } finally {
            i = 4;
            // catch确定了返回值是3，再执行finally 虽然finally里面i=4，但是有新的return 重新确定返回值 所以是4
            return i;
        }
    }
}
